package com.br.extreme.smartstock;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;

import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;

import com.br.extreme.smartstock.adapter.SelectAdapter;
import com.br.extreme.smartstock.adapter.SelectItem;
import com.br.extreme.smartstock.model.ProdutoDTO;
import com.br.extreme.smartstock.service.CadastrarStockService;
import com.br.extreme.smartstock.service.ConsultarStockService;
import com.br.extreme.smartstock.util.ConfigDialog;
import com.br.extreme.smartstock.util.DataBaseFake;


public class MainActivity extends ActionBarActivity {

	private static final int REQUEST_CODE_FOR_BAR_CODE_SCAN = 0;
	private static final String BAR_CODE_SCAN = "com.google.zxing.client.android.SCAN";
	
	private Button btnSalvar; 
	private Button btnPesquisar;
	
	private EditText txtBarras;
    private EditText txtDescricao;
    private EditText txtValor;
    
    private EditText txtCfop;
    private EditText txtQuantidade;
    private Spinner spnNcm;
    private EditText txtIcms;
    private EditText txtCst;
	private Integer codigoProduto;
	
	@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        this.getSupportActionBar().setIcon(R.drawable.ic_launcher);
        this.getSupportActionBar().setHomeButtonEnabled(true);
        txtBarras = (EditText) findViewById(R.id.txtBarras);
        txtDescricao = (EditText) findViewById(R.id.txtDescricao);
        txtValor = (EditText)findViewById(R.id.txtValor);
        
        txtQuantidade = (EditText)findViewById(R.id.txtQuantidade);
        spnNcm = (Spinner)findViewById(R.id.spnNcm);
        
        spnNcm.setAdapter(carregarNcm());
        
        txtCfop = (EditText)findViewById(R.id.txtCfop);
        txtCst = (EditText)findViewById(R.id.txtCst);
        txtIcms = (EditText)findViewById(R.id.txtIcms);
        
        btnSalvar = (Button) findViewById( R.id.btnSalvar);
        btnSalvar.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				ProdutoDTO produto = new ProdutoDTO();
				produto.setCodigo(codigoProduto);
				produto.setBarras(txtBarras.getText().toString());
				produto.setCfop(Integer.parseInt( txtCfop.getText().toString()));
				produto.setCst(Integer.parseInt(txtCst.getText().toString()));
				produto.setDescricao(txtDescricao.getText().toString());
				produto.setIcms(Integer.parseInt(txtIcms.getText().toString()));				

				produto.setNcm(((SelectItem)spnNcm.getSelectedItem()).getCodigo());
				
				produto.setQuantidade(Double.parseDouble(txtQuantidade.getText().toString()));
				produto.setValor(new BigDecimal(txtValor.getText().toString()));
				
				CadastrarStockService task = new CadastrarStockService(MainActivity.this ,getPreferences());
				task.execute(produto);
				
				
				
			}
		});
        
        btnPesquisar = (Button)findViewById( R.id.btnPesquisar);
        btnPesquisar.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				//Toast.makeText(getApplicationContext(), "Oi", Toast.LENGTH_LONG).show();;
				Intent barcode = new Intent(BAR_CODE_SCAN);
				startActivityForResult(barcode, REQUEST_CODE_FOR_BAR_CODE_SCAN);
			}
		});
     
        
    }

	private SelectAdapter carregarNcm(){
		return new SelectAdapter(this, DataBaseFake.getNcmList());
	}
	
	private SelectAdapter carregarCfop(){
		return new SelectAdapter(this, DataBaseFake.getCfopList());
	}
	
	private SelectAdapter carregarCst(){		
		return new SelectAdapter(this, DataBaseFake.getCstList());
	}
	
	private SelectAdapter carregarIcms(){	
		return new SelectAdapter(this, DataBaseFake.getIcmsList());
	}
	
	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		menu.add(0, 1, 0, "Config");
		return super.onCreateOptionsMenu(menu);
	}
	
	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		if(item.getItemId() == 1){
			new ConfigDialog().show(this);
		}
		return super.onOptionsItemSelected(item);
	}
	
	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		if(REQUEST_CODE_FOR_BAR_CODE_SCAN == requestCode){
			if(resultCode == RESULT_OK){
				String barras = data.getStringExtra("SCAN_RESULT");
				txtBarras.setText(barras);				
				ConsultarStockService task = new ConsultarStockService(MainActivity.this, getPreferences());
				task.execute(barras);
				ProdutoDTO produto;
				try {
					produto = task.get();
					codigoProduto = produto.getCodigo();
					txtDescricao.setText(produto.getDescricao());
					txtValor.setText(produto.getValor().toString());
					txtQuantidade.setText(produto.getQuantidade().toString());									
					spnNcm.setSelection(((SelectAdapter)spnNcm.getAdapter()).getItemIndex(produto.getNcm()));
					
					txtCfop.setText(produto.getCfop().toString());				
					txtCst.setText(produto.getCst().toString());				
					txtIcms.setText(produto.getIcms().toString());				
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		}
		
		super.onActivityResult(requestCode, resultCode, data);
	}

	private SharedPreferences getPreferences() {
		return this.getSharedPreferences("config", MODE_PRIVATE);
	}
}
